﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Entidad;
using System.Data.SqlClient;
namespace DAO
{
    public class UsuarioQueryDAO : ABMCUsuarioInterface 
    {
          private DAO_v2 dao;
     
        public UsuarioQueryDAO()
        {
            dao = new DAO_v2();
            
        }
        public string CadenaConexion()
        {
            return dao.StringConexion();
        }
       
        public List<UsuarioEnt> ObtenerUsuariosQueryParaAdmin()
        {
            SqlConnection cn = new SqlConnection(CadenaConexion());

            try
            {
               
                cn.Open();
                List<UsuarioEnt> usuarios = new List<UsuarioEnt>();
                List<String> tablas = new List<String>();
                List<String> columnas = new List<String>();
                List<String> fk = new List<String>();
                List<String> pk = new List<String>();
                tablas.Add("Persona p");
                tablas.Add("Usuario u");
                tablas.Add("Rol r");
                columnas.Add("u.id_Usuario");
                columnas.Add("p.nombre");
                columnas.Add("p.apellido");
                columnas.Add("u.eMail");
                columnas.Add("u.legajo");
                columnas.Add("u.fechaCreacion");
                columnas.Add("u.activo");
                columnas.Add("r.nombre as Rol");
                fk.Add("u.id_Persona");
                pk.Add("p.id_Persona");
                fk.Add("u.id_Rol");
                pk.Add("r.id_Rol");

                // Filtro para saber si esta activo

              //  List<String> parametros = new List<String>();
              //List<Object> datos = new List<Object>();
              //  parametros.Add("activo");
              //  datos.Add(true);

               // SqlCommand cmd = dao.BuscarVariasTablasConFiltro(tablas, columnas, fk, pk,parametros,datos );

                SqlCommand cmd = dao.BuscarVariasTablasSinFiltro(tablas, columnas, fk, pk);
                   cmd.Connection = cn;
                SqlDataReader dr = cmd.ExecuteReader();
                while (dr.Read())
                {
                    UsuarioEnt Usuario = new UsuarioEnt();
                    Usuario.id_Usuario = int.Parse(dr["id_Usuario"].ToString());
                    Usuario.Apellido = dr["apellido"].ToString();
                    Usuario.Nombre = dr["nombre"].ToString();
                    Usuario.Legajo = int.Parse(dr["legajo"].ToString());
                    Usuario.Email = dr["eMail"].ToString();
                    Usuario.FechaCreacion = DateTime.Parse(dr["fechaCreacion"].ToString());
                    Usuario.Activo = bool.Parse(dr["activo"].ToString());
                    Usuario.rol = dr["Rol"].ToString();


                    usuarios.Add(Usuario);
                    }

                return usuarios;

            }
            catch (SqlException ex)
            {
                return null;
                throw new ApplicationException("Error al obtener todos los Usuarios..."); 
            }
            finally
            {
                dao.CerrarConexion(cn);
            }
        }

        public List<UsuarioEnt> ObtenerUsuariosQueryParaOtros()
        {
            SqlConnection cn = new SqlConnection(CadenaConexion());

            try
            {

                cn.Open();
                List<UsuarioEnt> usuarios = new List<UsuarioEnt>();
                List<String> tablas = new List<String>();
                List<String> columnas = new List<String>();
                List<String> fk = new List<String>();
                List<String> pk = new List<String>();
                tablas.Add("Persona p");
                tablas.Add("Usuario u");
                tablas.Add("Rol r");
                columnas.Add("u.id_Usuario");
                columnas.Add("p.nombre");
                columnas.Add("p.apellido");
                columnas.Add("u.eMail");
                columnas.Add("u.legajo");
                columnas.Add("u.fechaCreacion");
                columnas.Add("u.activo");
                columnas.Add("r.nombre as Rol");
                fk.Add("u.id_Persona");
                pk.Add("p.id_Persona");
                fk.Add("u.id_Rol");
                pk.Add("r.id_Rol");

                // Filtro para saber si esta activo

                List<String> parametros = new List<String>();
                List<Object> datos = new List<Object>();
                parametros.Add("activo");
                datos.Add(true);

                SqlCommand cmd = dao.BuscarVariasTablasConFiltro(tablas, columnas, fk, pk, parametros, datos);

                //SqlCommand cmd = dao.BuscarVariasTablasSinFiltro(tablas, columnas, fk, pk);
                cmd.Connection = cn;
                SqlDataReader dr = cmd.ExecuteReader();
                while (dr.Read())
                {
                    UsuarioEnt Usuario = new UsuarioEnt();
                    Usuario.id_Usuario = int.Parse(dr["id_Usuario"].ToString());
                    Usuario.Apellido = dr["apellido"].ToString();
                    Usuario.Nombre = dr["nombre"].ToString();
                    Usuario.Legajo = int.Parse(dr["legajo"].ToString());
                    Usuario.Email = dr["eMail"].ToString();
                    Usuario.FechaCreacion = DateTime.Parse(dr["fechaCreacion"].ToString());
                    Usuario.Activo = bool.Parse(dr["activo"].ToString());
                    Usuario.rol = dr["Rol"].ToString();


                    usuarios.Add(Usuario);
                }

                return usuarios;

            }
            catch (SqlException ex)
            {
                return null;
                throw new ApplicationException("Error al obtener todos los Usuarios...");
            }
            finally
            {
                dao.CerrarConexion(cn);
            }
        }

        //usuario
        public void registrarUsuario(UsuarioEnt usuario, int id_persona)
        {

            throw new NotImplementedException();
        }
       public void actualizarUsuario(UsuarioEnt usuario, int id_persona){
            throw new NotImplementedException();
         }

       
        public void borrarUsuario(int legajo)
           {

               throw new NotImplementedException();
           }
        public UsuarioEnt buscarUsuario(int legajo)
         {
             throw new NotImplementedException();
        }

        //Persona

       public int registrarPersona(PersonaEnt persona)
        {
            throw new NotImplementedException();
       }
        public void actualizarPersona(PersonaEnt persona)
       {

           throw new NotImplementedException();
       }
        public List<Entidad.TipoDNIEnt> obtenerTipoDoc()
        {

            throw new NotImplementedException();
        }
       public void borrarPersona(int id_persona)
        {
            throw new NotImplementedException();
        }
       public PersonaEnt BuscarPersona(int id_persona)
       {
           throw new NotImplementedException();
       }
       public Boolean BuscarPersonaDocumento(int documento, int tipoDoc)
       {
           throw new NotImplementedException();
       }

       public List<UsuarioEnt>  buscarUsuarioFiltro(string filtro)
       {
           throw new NotImplementedException();
       }
    
    }


}
